Linux では、ファイルに対してリンクを作成することができます。リンク機能は、ファイルをコピーしたり移動したりせずに、別のディレクトリ
にあるように扱うことができる機能です。
これは、Windows のショートカットや Macintosh のエイリアスのようなもので、1つのファイルに対して複数のリンクを設定することができます。
リンク自体にはそのファイルの情報は記録されておらず、ファイルの存在場所の情報が記録されています。 リンクを実行することで、リンク先のファイルを呼び出すことができます。
リンクには、 ハードリンク と シンボリックリンク の2種類があり、それぞれリンクの性質が違います。
ハードリンクはファイルに複数の名前を割り当てる機能です。
複数のハードリンクがある場合、ハードリンクはファイルの実体そのものとして認識されるため、ファイルに対してはどのリンクも同じ扱いになります。
用途とメリットは、異なるディレクトリでも同一ファイルを管理する際、特にディスク容量を占有することなく作成できることです。
また、全てのハードリンクが削除されるまでファイルの本体は削除されません。 注意点としては、ハードリンクはiノード番号を共有することで実現しているので、異なるファイルシステムやディレクトリに対してはハードリンクを作成することができません。
ハードリンクでは直接ファイル本体にリンクされています。
そのため同じファイルが2つあるように扱われます。
全てのリンクを削除するまで、ファイルは完全には削除されません。
ハードリンクは、リンクファイルを作成するごとにリンクカウントが増え、0になると実体ファイルも削除されます。
リンクカウントとは
ls -l で表示される結果の第2項目がファイルのリンクカウントでファイルのハードリンクの数を表す。
シンボリックリンクは、ハードリンクと違って、ファイルの本体の位置情報だけを記録しているファイルで、ファイルの本体とは完全に区別されています。 シンボリックリンクは、ファイルだけでなくディレクトリに対しても作成することができます。 また、ハードリンクのような制限がなく、異なるファイルシステムをまたぐリンクも作成することが可能です。
ただし、シンボリックリンクは、ファイル本体とはまったく別ファイルのため、シンボリックリンクを残したままファイル本体を削除できてしまいます。 このため、本体が削除されたシンボリックリンクにアクセスするとエラーとなってしまいます。 ハードリンクは 「ls コマンド」 でリンク情報を確認することができますが、シンボリックリンクは確認することができないため、 自分でリンクを管理しておく必要があります。
>
ファイル本体を削除シンボリックリンクは、ファイル本体とは待ったく別ファイルとして扱われます。
シンボリックリンクには、ファイル本体の位置情報が記録されており、その情報からファイル本体へ接続を行います。 このため、ファイル本体がなくなった場合、参照先が見つからずエラーとなります。
ファイルやディレクトリのリンクを作成するには、ln コマンドを使います。
● ln コマンド構文
ln [オプション] 元ファイル リンクファイル |
|
-b | 上書きや削除されることになるファイルにはバックアップを作成する |
-f | リンク先に同名ファイルがあるときは削除 |
-i | リンク先に同名ファイルがあるときは問い合わせる |
-s | シンボリック・リンクを作成する |
-v | コピー前に各ファイルを表示する |
# ln test.txt testh.lnk # ls -il 3145877 -rwxr-xr-x 2 root root 226 4月 4 23:36 2013 test.txt 3145877 -rwxr-xr-x 2 root root 226 4月 4 23:36 2013 testh.lnk |
# ln -s test.txt test.lnk # ls -il 3145885 lrwxrwxrwx 1 root root 8 4月 4 21:06 2013 test.lnk -> test.txt 3145877 -rwxr-xr-x 2 root root 226 4月 4 23:36 2013 test.txt |
# cp -s test.txt test2.lnk # ls -il 3145886 lrwxrwxrwx 1 root root 8 4月 4 23:10 2013 test2.lnk -> test.txt 3145877 -rwxr-xr-x 2 root root 226 4月 4 23:36 2013 test.txt |
cp コマンドを -d 又は -a を使って、コピー元にシンボリックリンクを指定することでコピーが作成できます。
# cp -d test.lnk test3.lnk # ls -il 3145885 lrwxrwxrwx 1 root root 8 4月 4 21:06 2013 test.lnk -> test.txt 3145877 -rwxr-xr-x 2 root root 226 4月 4 23:36 2013 test.txt 3145894 lrwxrwxrwx 1 root root 8 4月 4 23:18 2013 test3.lnk -> test.txt |
# cp -a test.lnk test4.lnk # ls -il 3145885 lrwxrwxrwx 1 root root 8 4月 4 21:06 2013 test.lnk -> test.txt 3145877 -rwxr-xr-x 2 root root 226 4月 4 23:36 2013 test.txt 3145894 lrwxrwxrwx 1 root root 8 4月 4 23:18 2013 test3.lnk -> test.txt 3145895 lrwxrwxrwx 1 root root 8 4月 4 21:06 2013 test4.lnk -> test.txt |
-a オプションを使った場合は、更新日時などの属性情報をそのままコピーします。
www.it-shikaku.jp